home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / font / ExtendedTextSourceLabel.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  10.3 KB  |  606 lines

  1. package sun.font;
  2.  
  3. import java.awt.Font;
  4. import java.awt.Graphics2D;
  5. import java.awt.Rectangle;
  6. import java.awt.Shape;
  7. import java.awt.font.FontRenderContext;
  8. import java.awt.font.GlyphJustificationInfo;
  9. import java.awt.font.LineMetrics;
  10. import java.awt.geom.AffineTransform;
  11. import java.awt.geom.Rectangle2D;
  12. import java.util.Map;
  13.  
  14. class ExtendedTextSourceLabel extends ExtendedTextLabel implements Decoration.Label {
  15.    TextSource source;
  16.    private Decoration decorator;
  17.    private Font font;
  18.    private AffineTransform baseTX;
  19.    // $FF: renamed from: cm sun.font.CoreMetrics
  20.    private CoreMetrics field_0;
  21.    // $FF: renamed from: lb java.awt.geom.Rectangle2D
  22.    Rectangle2D field_1;
  23.    // $FF: renamed from: ab java.awt.geom.Rectangle2D
  24.    Rectangle2D field_2;
  25.    // $FF: renamed from: vb java.awt.geom.Rectangle2D
  26.    Rectangle2D field_3;
  27.    // $FF: renamed from: ib java.awt.geom.Rectangle2D
  28.    Rectangle2D field_4;
  29.    // $FF: renamed from: gv sun.font.StandardGlyphVector
  30.    StandardGlyphVector field_5;
  31.    float[] charinfo;
  32.    private static final int posx = 0;
  33.    private static final int posy = 1;
  34.    private static final int advx = 2;
  35.    private static final int advy = 3;
  36.    private static final int visx = 4;
  37.    private static final int visy = 5;
  38.    private static final int visw = 6;
  39.    private static final int vish = 7;
  40.    private static final int numvals = 8;
  41.  
  42.    public ExtendedTextSourceLabel(TextSource var1, Decoration var2) {
  43.       this.source = var1;
  44.       this.decorator = var2;
  45.       this.finishInit();
  46.    }
  47.  
  48.    public ExtendedTextSourceLabel(TextSource var1, ExtendedTextSourceLabel var2, int var3) {
  49.       this.source = var1;
  50.       this.decorator = var2.decorator;
  51.       this.finishInit();
  52.    }
  53.  
  54.    private void finishInit() {
  55.       this.font = this.source.getFont();
  56.       Map var1 = this.font.getAttributes();
  57.       this.baseTX = AttributeValues.getBaselineTransform(var1);
  58.       if (this.baseTX == null) {
  59.          this.field_0 = this.source.getCoreMetrics();
  60.       } else {
  61.          AffineTransform var2 = AttributeValues.getCharTransform(var1);
  62.          if (var2 == null) {
  63.             var2 = new AffineTransform();
  64.          }
  65.  
  66.          this.font = this.font.deriveFont(var2);
  67.          LineMetrics var3 = this.font.getLineMetrics(this.source.getChars(), this.source.getStart(), this.source.getStart() + this.source.getLength(), this.source.getFRC());
  68.          this.field_0 = CoreMetrics.get(var3);
  69.       }
  70.  
  71.    }
  72.  
  73.    public Rectangle2D getLogicalBounds() {
  74.       return this.getLogicalBounds(0.0F, 0.0F);
  75.    }
  76.  
  77.    public Rectangle2D getLogicalBounds(float var1, float var2) {
  78.       if (this.field_1 == null) {
  79.          this.field_1 = this.createLogicalBounds();
  80.       }
  81.  
  82.       return new Rectangle2D.Float((float)(this.field_1.getX() + (double)var1), (float)(this.field_1.getY() + (double)var2), (float)this.field_1.getWidth(), (float)this.field_1.getHeight());
  83.    }
  84.  
  85.    public float getAdvance() {
  86.       if (this.field_1 == null) {
  87.          this.field_1 = this.createLogicalBounds();
  88.       }
  89.  
  90.       return (float)this.field_1.getWidth();
  91.    }
  92.  
  93.    public Rectangle2D getVisualBounds(float var1, float var2) {
  94.       if (this.field_3 == null) {
  95.          this.field_3 = this.decorator.getVisualBounds(this);
  96.       }
  97.  
  98.       return new Rectangle2D.Float((float)(this.field_3.getX() + (double)var1), (float)(this.field_3.getY() + (double)var2), (float)this.field_3.getWidth(), (float)this.field_3.getHeight());
  99.    }
  100.  
  101.    public Rectangle2D getAlignBounds(float var1, float var2) {
  102.       if (this.field_2 == null) {
  103.          this.field_2 = this.createAlignBounds();
  104.       }
  105.  
  106.       return new Rectangle2D.Float((float)(this.field_2.getX() + (double)var1), (float)(this.field_2.getY() + (double)var2), (float)this.field_2.getWidth(), (float)this.field_2.getHeight());
  107.    }
  108.  
  109.    public Rectangle2D getItalicBounds(float var1, float var2) {
  110.       if (this.field_4 == null) {
  111.          this.field_4 = this.createItalicBounds();
  112.       }
  113.  
  114.       return new Rectangle2D.Float((float)(this.field_4.getX() + (double)var1), (float)(this.field_4.getY() + (double)var2), (float)this.field_4.getWidth(), (float)this.field_4.getHeight());
  115.    }
  116.  
  117.    public Rectangle getPixelBounds(FontRenderContext var1, float var2, float var3) {
  118.       return this.getGV().getPixelBounds(var1, var2, var3);
  119.    }
  120.  
  121.    public boolean isSimple() {
  122.       return this.decorator == Decoration.getPlainDecoration() && this.baseTX == null;
  123.    }
  124.  
  125.    public AffineTransform getBaselineTransform() {
  126.       return this.baseTX;
  127.    }
  128.  
  129.    public Shape handleGetOutline(float var1, float var2) {
  130.       return this.getGV().getOutline(var1, var2);
  131.    }
  132.  
  133.    public Shape getOutline(float var1, float var2) {
  134.       return this.decorator.getOutline(this, var1, var2);
  135.    }
  136.  
  137.    public void handleDraw(Graphics2D var1, float var2, float var3) {
  138.       var1.drawGlyphVector(this.getGV(), var2, var3);
  139.    }
  140.  
  141.    public void draw(Graphics2D var1, float var2, float var3) {
  142.       this.decorator.drawTextAndDecorations(this, var1, var2, var3);
  143.    }
  144.  
  145.    protected Rectangle2D createLogicalBounds() {
  146.       return this.getGV().getLogicalBounds();
  147.    }
  148.  
  149.    public Rectangle2D handleGetVisualBounds() {
  150.       return this.getGV().getVisualBounds();
  151.    }
  152.  
  153.    protected Rectangle2D createAlignBounds() {
  154.       float[] var1 = this.getCharinfo();
  155.       float var2 = 0.0F;
  156.       float var3 = -this.field_0.ascent;
  157.       float var4 = 0.0F;
  158.       float var5 = this.field_0.ascent + this.field_0.descent;
  159.       boolean var6 = (this.source.getLayoutFlags() & 8) == 0;
  160.       int var7 = var1.length - 8;
  161.       if (var6) {
  162.          while(var7 > 0 && var1[var7 + 6] == 0.0F) {
  163.             var7 -= 8;
  164.          }
  165.       }
  166.  
  167.       if (var7 >= 0) {
  168.          int var8;
  169.          for(var8 = 0; var8 < var7 && (var1[var8 + 2] == 0.0F || !var6 && var1[var8 + 6] == 0.0F); var8 += 8) {
  170.          }
  171.  
  172.          var2 = Math.max(0.0F, var1[var8 + 0]);
  173.          var4 = var1[var7 + 0] + var1[var7 + 2] - var2;
  174.       }
  175.  
  176.       return new Rectangle2D.Float(var2, var3, var4, var5);
  177.    }
  178.  
  179.    public Rectangle2D createItalicBounds() {
  180.       float var1 = this.field_0.italicAngle;
  181.       Rectangle2D var2 = this.getLogicalBounds();
  182.       float var3 = (float)var2.getMinX();
  183.       float var4 = -this.field_0.ascent;
  184.       float var5 = (float)var2.getMaxX();
  185.       float var6 = this.field_0.descent;
  186.       if (var1 != 0.0F) {
  187.          if (var1 > 0.0F) {
  188.             var3 -= var1 * (var6 - this.field_0.ssOffset);
  189.             var5 -= var1 * (var4 - this.field_0.ssOffset);
  190.          } else {
  191.             var3 -= var1 * (var4 - this.field_0.ssOffset);
  192.             var5 -= var1 * (var6 - this.field_0.ssOffset);
  193.          }
  194.       }
  195.  
  196.       return new Rectangle2D.Float(var3, var4, var5 - var3, var6 - var4);
  197.    }
  198.  
  199.    private final StandardGlyphVector getGV() {
  200.       if (this.field_5 == null) {
  201.          this.field_5 = this.createGV();
  202.       }
  203.  
  204.       return this.field_5;
  205.    }
  206.  
  207.    protected StandardGlyphVector createGV() {
  208.       FontRenderContext var1 = this.source.getFRC();
  209.       int var2 = this.source.getLayoutFlags();
  210.       char[] var3 = this.source.getChars();
  211.       int var4 = this.source.getStart();
  212.       int var5 = this.source.getLength();
  213.       GlyphLayout var6 = GlyphLayout.get((GlyphLayout.LayoutEngineFactory)null);
  214.       this.field_5 = var6.layout(this.font, var1, var3, var4, var5, var2, (StandardGlyphVector)null);
  215.       GlyphLayout.done(var6);
  216.       return this.field_5;
  217.    }
  218.  
  219.    public int getNumCharacters() {
  220.       return this.source.getLength();
  221.    }
  222.  
  223.    public CoreMetrics getCoreMetrics() {
  224.       return this.field_0;
  225.    }
  226.  
  227.    public float getCharX(int var1) {
  228.       this.validate(var1);
  229.       return this.getCharinfo()[this.l2v(var1) * 8 + 0];
  230.    }
  231.  
  232.    public float getCharY(int var1) {
  233.       this.validate(var1);
  234.       return this.getCharinfo()[this.l2v(var1) * 8 + 1];
  235.    }
  236.  
  237.    public float getCharAdvance(int var1) {
  238.       this.validate(var1);
  239.       return this.getCharinfo()[this.l2v(var1) * 8 + 2];
  240.    }
  241.  
  242.    public Rectangle2D handleGetCharVisualBounds(int var1) {
  243.       this.validate(var1);
  244.       float[] var2 = this.getCharinfo();
  245.       var1 = this.l2v(var1) * 8;
  246.       return new Rectangle2D.Float(var2[var1 + 4], var2[var1 + 5], var2[var1 + 6], var2[var1 + 7]);
  247.    }
  248.  
  249.    public Rectangle2D getCharVisualBounds(int var1, float var2, float var3) {
  250.       Rectangle2D var4 = this.decorator.getCharVisualBounds(this, var1);
  251.       if (var2 != 0.0F || var3 != 0.0F) {
  252.          var4.setRect(var4.getX() + (double)var2, var4.getY() + (double)var3, var4.getWidth(), var4.getHeight());
  253.       }
  254.  
  255.       return var4;
  256.    }
  257.  
  258.    private void validate(int var1) {
  259.       if (var1 < 0) {
  260.          throw new IllegalArgumentException("index " + var1 + " < 0");
  261.       } else if (var1 >= this.source.getLength()) {
  262.          throw new IllegalArgumentException("index " + var1 + " < " + this.source.getLength());
  263.       }
  264.    }
  265.  
  266.    public int logicalToVisual(int var1) {
  267.       this.validate(var1);
  268.       return this.l2v(var1);
  269.    }
  270.  
  271.    public int visualToLogical(int var1) {
  272.       this.validate(var1);
  273.       return this.v2l(var1);
  274.    }
  275.  
  276.    public int getLineBreakIndex(int var1, float var2) {
  277.       float[] var3 = this.getCharinfo();
  278.       int var4 = this.source.getLength();
  279.       --var1;
  280.  
  281.       while(var2 >= 0.0F) {
  282.          ++var1;
  283.          if (var1 >= var4) {
  284.             break;
  285.          }
  286.  
  287.          float var5 = var3[this.l2v(var1) * 8 + 2];
  288.          var2 -= var5;
  289.       }
  290.  
  291.       return var1;
  292.    }
  293.  
  294.    public float getAdvanceBetween(int var1, int var2) {
  295.       float var3 = 0.0F;
  296.       float[] var4 = this.getCharinfo();
  297.       --var1;
  298.  
  299.       while(true) {
  300.          ++var1;
  301.          if (var1 >= var2) {
  302.             return var3;
  303.          }
  304.  
  305.          var3 += var4[this.l2v(var1) * 8 + 2];
  306.       }
  307.    }
  308.  
  309.    public boolean caretAtOffsetIsValid(int var1) {
  310.       if (var1 != 0 && var1 != this.source.getLength()) {
  311.          char var2 = this.source.getChars()[this.source.getStart() + var1];
  312.          if (var2 != '\t' && var2 != '\n' && var2 != '\r') {
  313.             int var3 = this.l2v(var1);
  314.             return this.getCharinfo()[var3 * 8 + 2] != 0.0F;
  315.          } else {
  316.             return true;
  317.          }
  318.       } else {
  319.          return true;
  320.       }
  321.    }
  322.  
  323.    private final float[] getCharinfo() {
  324.       if (this.charinfo == null) {
  325.          this.charinfo = this.createCharinfo();
  326.       }
  327.  
  328.       return this.charinfo;
  329.    }
  330.  
  331.    protected float[] createCharinfo() {
  332.       StandardGlyphVector var1 = this.getGV();
  333.       float[] var2 = null;
  334.  
  335.       try {
  336.          var2 = var1.getGlyphInfo();
  337.       } catch (Exception var31) {
  338.          System.out.println(this.source);
  339.       }
  340.  
  341.       int var3 = var1.getNumGlyphs();
  342.       int[] var4 = var1.getGlyphCharIndices(0, var3, (int[])null);
  343.       boolean var5 = false;
  344.       if (var5) {
  345.          System.err.println("number of glyphs: " + var3);
  346.  
  347.          for(int var6 = 0; var6 < var3; ++var6) {
  348.             System.err.println("g: " + var6 + ", x: " + var2[var6 * 8 + 0] + ", a: " + var2[var6 * 8 + 2] + ", n: " + var4[var6]);
  349.          }
  350.       }
  351.  
  352.       int var32 = var4[0];
  353.       int var8 = 0;
  354.       int var9 = 0;
  355.       int var10 = 0;
  356.       int var11 = 0;
  357.       int var12 = 0;
  358.       int var13 = var3;
  359.       byte var14 = 8;
  360.       byte var15 = 1;
  361.       boolean var16 = (this.source.getLayoutFlags() & 1) == 0;
  362.       if (!var16) {
  363.          var32 = var4[var3 - 1];
  364.          var8 = 0;
  365.          var9 = var2.length - 8;
  366.          var10 = 0;
  367.          var11 = var2.length - 8;
  368.          var12 = var3 - 1;
  369.          var13 = -1;
  370.          var14 = -8;
  371.          var15 = -1;
  372.       }
  373.  
  374.       float var17 = 0.0F;
  375.       float var18 = 0.0F;
  376.       float var19 = 0.0F;
  377.       float var20 = 0.0F;
  378.       float var21 = 0.0F;
  379.       float var22 = 0.0F;
  380.       float var23 = 0.0F;
  381.  
  382.       boolean var24;
  383.       for(var24 = false; var12 != var13; var10 += var15) {
  384.          boolean var25 = false;
  385.          int var26 = 0;
  386.          var32 = var4[var12];
  387.          int var7 = var32;
  388.          var12 += var15;
  389.  
  390.          for(var11 += var14; var12 != var13 && (var2[var11 + 2] == 0.0F || var32 != var8 || var4[var12] <= var7 || var7 - var32 > var26); var11 += var14) {
  391.             if (!var25) {
  392.                int var27 = var11 - var14;
  393.                var17 = var2[var27 + 0];
  394.                var18 = var17 + var2[var27 + 2];
  395.                var19 = var2[var27 + 4];
  396.                var20 = var2[var27 + 5];
  397.                var21 = var19 + var2[var27 + 6];
  398.                var22 = var20 + var2[var27 + 7];
  399.                var25 = true;
  400.             }
  401.  
  402.             ++var26;
  403.             float var39 = var2[var11 + 2];
  404.             if (var39 != 0.0F) {
  405.                float var28 = var2[var11 + 0];
  406.                var17 = Math.min(var17, var28);
  407.                var18 = Math.max(var18, var28 + var39);
  408.             }
  409.  
  410.             float var43 = var2[var11 + 6];
  411.             if (var43 != 0.0F) {
  412.                float var29 = var2[var11 + 4];
  413.                float var30 = var2[var11 + 5];
  414.                var19 = Math.min(var19, var29);
  415.                var20 = Math.min(var20, var30);
  416.                var21 = Math.max(var21, var29 + var43);
  417.                var22 = Math.max(var22, var30 + var2[var11 + 7]);
  418.             }
  419.  
  420.             var32 = Math.min(var32, var4[var12]);
  421.             var7 = Math.max(var7, var4[var12]);
  422.             var12 += var15;
  423.          }
  424.  
  425.          if (var5) {
  426.             System.out.println("minIndex = " + var32 + ", maxIndex = " + var7);
  427.          }
  428.  
  429.          var8 = var7 + 1;
  430.          var2[var9 + 1] = var23;
  431.          var2[var9 + 3] = 0.0F;
  432.          if (var25) {
  433.             var2[var9 + 0] = var17;
  434.             var2[var9 + 2] = var18 - var17;
  435.             var2[var9 + 4] = var19;
  436.             var2[var9 + 5] = var20;
  437.             var2[var9 + 6] = var21 - var19;
  438.             var2[var9 + 7] = var22 - var20;
  439.             if (var7 - var32 < var26) {
  440.                var24 = true;
  441.             }
  442.  
  443.             if (var32 < var7) {
  444.                if (!var16) {
  445.                   var18 = var17;
  446.                }
  447.  
  448.                var21 -= var19;
  449.                var22 -= var20;
  450.                int var41 = var32;
  451.  
  452.                for(int var44 = var9 / 8; var32 < var7; var2[var9 + 7] = var22) {
  453.                   ++var32;
  454.                   var10 += var15;
  455.                   var9 += var14;
  456.                   if ((var9 < 0 || var9 >= var2.length) && var5) {
  457.                      System.out.println("minIndex = " + var41 + ", maxIndex = " + var7 + ", cp = " + var44);
  458.                   }
  459.  
  460.                   var2[var9 + 0] = var18;
  461.                   var2[var9 + 1] = var23;
  462.                   var2[var9 + 2] = 0.0F;
  463.                   var2[var9 + 3] = 0.0F;
  464.                   var2[var9 + 4] = var19;
  465.                   var2[var9 + 5] = var20;
  466.                   var2[var9 + 6] = var21;
  467.                }
  468.             }
  469.  
  470.             var25 = false;
  471.          } else if (var24) {
  472.             int var40 = var11 - var14;
  473.             var2[var9 + 0] = var2[var40 + 0];
  474.             var2[var9 + 2] = var2[var40 + 2];
  475.             var2[var9 + 4] = var2[var40 + 4];
  476.             var2[var9 + 5] = var2[var40 + 5];
  477.             var2[var9 + 6] = var2[var40 + 6];
  478.             var2[var9 + 7] = var2[var40 + 7];
  479.          }
  480.  
  481.          var9 += var14;
  482.       }
  483.  
  484.       if (var24 && !var16) {
  485.          var9 -= var14;
  486.          System.arraycopy(var2, var9, var2, 0, var2.length - var9);
  487.       }
  488.  
  489.       if (var5) {
  490.          char[] var37 = this.source.getChars();
  491.          int var38 = this.source.getStart();
  492.          int var42 = this.source.getLength();
  493.          System.out.println("char info for " + var42 + " characters");
  494.          int var45 = 0;
  495.  
  496.          while(var45 < var42 * 8) {
  497.             System.out.println(" ch: " + Integer.toHexString(var37[var38 + this.v2l(var45 / 8)]) + " x: " + var2[var45++] + " y: " + var2[var45++] + " xa: " + var2[var45++] + " ya: " + var2[var45++] + " l: " + var2[var45++] + " t: " + var2[var45++] + " w: " + var2[var45++] + " h: " + var2[var45++]);
  498.          }
  499.       }
  500.  
  501.       return var2;
  502.    }
  503.  
  504.    protected int l2v(int var1) {
  505.       return (this.source.getLayoutFlags() & 1) == 0 ? var1 : this.source.getLength() - 1 - var1;
  506.    }
  507.  
  508.    protected int v2l(int var1) {
  509.       return (this.source.getLayoutFlags() & 1) == 0 ? var1 : this.source.getLength() - 1 - var1;
  510.    }
  511.  
  512.    public TextLineComponent getSubset(int var1, int var2, int var3) {
  513.       return new ExtendedTextSourceLabel(this.source.getSubSource(var1, var2 - var1, var3), this.decorator);
  514.    }
  515.  
  516.    public String toString() {
  517.       TextSource var10001 = this.source;
  518.       return this.source.toString(false);
  519.    }
  520.  
  521.    public int getNumJustificationInfos() {
  522.       return this.getGV().getNumGlyphs();
  523.    }
  524.  
  525.    public void getJustificationInfos(GlyphJustificationInfo[] var1, int var2, int var3, int var4) {
  526.       StandardGlyphVector var5 = this.getGV();
  527.       float[] var6 = this.getCharinfo();
  528.       float var7 = var5.getFont().getSize2D();
  529.       GlyphJustificationInfo var8 = new GlyphJustificationInfo(0.0F, false, 3, 0.0F, 0.0F, false, 3, 0.0F, 0.0F);
  530.       GlyphJustificationInfo var9 = new GlyphJustificationInfo(var7, true, 1, 0.0F, var7, true, 1, 0.0F, var7 / 4.0F);
  531.       GlyphJustificationInfo var10 = new GlyphJustificationInfo(var7, true, 2, var7, var7, false, 3, 0.0F, 0.0F);
  532.       char[] var11 = this.source.getChars();
  533.       int var12 = this.source.getStart();
  534.       int var13 = var5.getNumGlyphs();
  535.       int var14 = 0;
  536.       int var15 = var13;
  537.       boolean var16 = (this.source.getLayoutFlags() & 1) == 0;
  538.       if (var3 != 0 || var4 != this.source.getLength()) {
  539.          if (var16) {
  540.             var14 = var3;
  541.             var15 = var4;
  542.          } else {
  543.             var14 = var13 - var4;
  544.             var15 = var13 - var3;
  545.          }
  546.       }
  547.  
  548.       for(int var17 = 0; var17 < var13; ++var17) {
  549.          GlyphJustificationInfo var18 = null;
  550.          if (var17 >= var14 && var17 < var15) {
  551.             if (var6[var17 * 8 + 2] == 0.0F) {
  552.                var18 = var8;
  553.             } else {
  554.                int var19 = this.v2l(var17);
  555.                char var20 = var11[var12 + var19];
  556.                if (Character.isWhitespace(var20)) {
  557.                   var18 = var9;
  558.                } else if ((var20 < 19968 || var20 >= 'ÍÄÄ') && (var20 < 'Í∞Ä' || var20 >= 'Ìû∞') && (var20 < 'Ô§Ä' || var20 >= 'Ô¨Ä')) {
  559.                   var18 = var8;
  560.                } else {
  561.                   var18 = var10;
  562.                }
  563.             }
  564.          }
  565.  
  566.          var1[var2 + var17] = var18;
  567.       }
  568.  
  569.    }
  570.  
  571.    public TextLineComponent applyJustificationDeltas(float[] var1, int var2, boolean[] var3) {
  572.       float[] var4 = (float[])this.getCharinfo().clone();
  573.       var3[0] = false;
  574.       StandardGlyphVector var5 = (StandardGlyphVector)this.getGV().clone();
  575.       float[] var6 = var5.getGlyphPositions((float[])null);
  576.       int var7 = var5.getNumGlyphs();
  577.       char[] var8 = this.source.getChars();
  578.       int var9 = this.source.getStart();
  579.       float var10 = 0.0F;
  580.  
  581.       for(int var11 = 0; var11 < var7; ++var11) {
  582.          if (Character.isWhitespace(var8[var9 + this.v2l(var11)])) {
  583.             var6[var11 * 2] += var10;
  584.             float var12 = var1[var2 + var11 * 2] + var1[var2 + var11 * 2 + 1];
  585.             var4[var11 * 8 + 0] += var10;
  586.             var4[var11 * 8 + 4] += var10;
  587.             var4[var11 * 8 + 2] += var12;
  588.             var10 += var12;
  589.          } else {
  590.             var10 += var1[var2 + var11 * 2];
  591.             var6[var11 * 2] += var10;
  592.             var4[var11 * 8 + 0] += var10;
  593.             var4[var11 * 8 + 4] += var10;
  594.             var10 += var1[var2 + var11 * 2 + 1];
  595.          }
  596.       }
  597.  
  598.       var6[var7 * 2] += var10;
  599.       var5.setGlyphPositions(var6);
  600.       ExtendedTextSourceLabel var14 = new ExtendedTextSourceLabel(this.source, this.decorator);
  601.       var14.field_5 = var5;
  602.       var14.charinfo = var4;
  603.       return var14;
  604.    }
  605. }
  606.